_scanExtensions: function() {
let finder = new ExtensionUtils.ExtensionFinder();
finder.connect('extension-found', Lang.bind(this, this._extensionFound));
- finder.connect('extensions-loaded', Lang.bind(this, this._extensionsLoaded));
finder.scanExtensions();
+ this._extensionsLoaded();
},
- _extensionFound: function(signals, extension) {
+ _extensionFound: function(finder, extension) {
let iter = this._model.append();
this._model.set(iter, [0, 1], [extension.uuid, extension.metadata.name]);
this._extensionIters[extension.uuid] = iter;
this.emit('extension-found', extension);
},
- _extensionsLoaded: function() {
- this.emit('extensions-loaded');
- },
-
scanExtensions: function() {
let perUserDir = Gio.File.new_for_path(global.userdatadir);
- FileUtils.collectFromDatadirsAsync('extensions',
- { processFile: Lang.bind(this, this._loadExtension),
- loadedCallback: Lang.bind(this, this._extensionsLoaded),
- includeUserDir: true,
- data: perUserDir });
+ FileUtils.collectFromDatadirs('extensions', true, Lang.bind(this, this._loadExtension, perUserDir));
}
});
Signals.addSignalMethods(ExtensionFinder.prototype);
});
}
-function _collectFromDirectoryAsync(dir, loadState) {
- function done() {
- loadState.numLoading--;
- if (loadState.loadedCallback &&
- loadState.numLoading == 0)
- loadState.loadedCallback(loadState.data);
- }
-
- dir.query_info_async('standard::type', Gio.FileQueryInfoFlags.NONE,
- GLib.PRIORITY_DEFAULT, null, function(object, res) {
- try {
- object.query_info_finish(res);
- } catch (e) {
- if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
- log(e.message);
- done();
- return;
- }
-
- listDirAsync(dir, Lang.bind(this, function(infos) {
- for (let i = 0; i < infos.length; i++)
- loadState.processFile(dir.get_child(infos[i].get_name()),
- infos[i], loadState.data);
- done();
- }));
- });
-}
-
-function collectFromDatadirsAsync(subdir, params) {
- params = Params.parse(params, { includeUserDir: false,
- processFile: null,
- loadedCallback: null,
- data: null });
- let loadState = { data: params.data,
- numLoading: 0,
- loadedCallback: params.loadedCallback,
- processFile: params.processFile };
-
- if (params.processFile == null) {
- if (params.loadedCallback)
- params.loadedCallback(params.data);
- return;
- }
-
+function collectFromDatadirs(subdir, includeUserDir, processFile) {
let dataDirs = GLib.get_system_data_dirs();
- if (params.includeUserDir)
+ if (includeUserDir)
dataDirs.unshift(GLib.get_user_data_dir());
- loadState.numLoading = dataDirs.length;
for (let i = 0; i < dataDirs.length; i++) {
let path = GLib.build_filenamev([dataDirs[i], 'gnome-shell', subdir]);
let dir = Gio.File.new_for_path(path);
- _collectFromDirectoryAsync(dir, loadState);
+ let fileEnum;
+ try {
+ fileEnum = dir.enumerate_children('standard::name,standard::type',
+ Gio.FileQueryInfoFlags.NONE, null);
+ } catch (e) {
+ fileEnum = null;
+ }
+ if (fileEnum != null) {
+ let info;
+ while ((info = fileEnum.next_file(null)))
+ processFile(fileEnum.get_child(info), info);
+ }
}
}
newEnabledExtensions.filter(function(uuid) {
return enabledExtensions.indexOf(uuid) == -1;
}).forEach(function(uuid) {
- enableExtension(uuid);
+ enableExtension(uuid);
});
// Find and disable all the newly disabled extensions: UUIDs found in the
enabledExtensions.filter(function(item) {
return newEnabledExtensions.indexOf(item) == -1;
}).forEach(function(uuid) {
- disableExtension(uuid);
+ disableExtension(uuid);
});
enabledExtensions = newEnabledExtensions;
enabledExtensions = getEnabledExtensions();
let finder = new ExtensionUtils.ExtensionFinder();
- finder.connect('extension-found', function(signals, extension) {
+ finder.connect('extension-found', function(finder, extension) {
loadExtension(extension);
});
finder.scanExtensions();
Gio.DesktopAppInfo.set_desktop_env('GNOME');
sessionMode = new SessionMode.SessionMode();
- sessionMode.connect('sessions-loaded', _sessionsLoaded);
- sessionMode.init();
-}
-
-function _sessionsLoaded() {
sessionMode.connect('updated', _sessionUpdated);
_initializePrefs();
_initializeUI();
const St = imports.gi.St;
const Shell = imports.gi.Shell;
+const FileUtils = imports.misc.fileUtils;
const Search = imports.ui.search;
const KEY_FILE_GROUP = 'Shell Search Provider';
return;
}
- let dataDirs = GLib.get_system_data_dirs();
- dataDirs.forEach(function(dataDir) {
- let path = GLib.build_filenamev([dataDir, 'gnome-shell', 'search-providers']);
- let dir = Gio.File.new_for_path(path);
- let fileEnum;
- try {
- fileEnum = dir.enumerate_children('standard::name,standard::type',
- Gio.FileQueryInfoFlags.NONE, null);
- } catch (e) {
- fileEnum = null;
- }
- if (fileEnum != null) {
- let info;
- while ((info = fileEnum.next_file(null)))
- loadRemoteSearchProvider(fileEnum.get_child(info));
- }
- });
+ FileUtils.collectFromDatadirs('search-providers', false, loadRemoteSearchProvider);
let sortOrder = searchSettings.get_strv('sort-order');
}
};
-function _getModes(modesLoadedCallback) {
- FileUtils.collectFromDatadirsAsync('modes',
- { processFile: _loadMode,
- loadedCallback: modesLoadedCallback,
- data: _modes });
-}
-
-function _loadMode(file, info, loadedData) {
+function _loadMode(file, info) {
let name = info.get_name();
let suffix = name.indexOf('.json');
let modeName = suffix == -1 ? name : name.slice(name, suffix);
- if (loadedData.hasOwnProperty(modeName))
+ if (_modes.hasOwnProperty(modeName))
return;
let fileContent, success, tag, newMode;
return;
}
- loadedData[modeName] = {};
+ _modes[modeName] = {};
let propBlacklist = ['unlockDialog'];
for (let prop in loadedData[DEFAULT_MODE]) {
if (newMode[prop] !== undefined &&
propBlacklist.indexOf(prop) == -1)
- loadedData[modeName][prop]= newMode[prop];
+ loadedData[modeName][prop] = newMode[prop];
}
- loadedData[modeName]['isPrimary'] = true;
+ _modes[modeName]['isPrimary'] = true;
+}
+
+function _getModes() {
+ FileUtils.collectFromDatadirs('modes', false, _loadMode);
}
function listModes() {
- _getModes(function(modes) {
+ let modes = _getModes();
+ modes.forEach(function() {
let names = Object.getOwnPropertyNames(modes);
for (let i = 0; i < names.length; i++)
if (_modes[names[i]].isPrimary)
const SessionMode = new Lang.Class({
Name: 'SessionMode',
- init: function() {
- _getModes(Lang.bind(this, function(modes) {
- this._modes = modes;
- let primary = modes[global.session_mode] &&
- modes[global.session_mode].isPrimary;
- let mode = primary ? global.session_mode : 'user';
- this._modeStack = [mode];
- this._sync();
-
- this.emit('sessions-loaded');
- }));
+ _init: function() {
+ let isPrimary = (_modes[global.session_mode] &&
+ _modes[global.session_mode].isPrimary);
+ let mode = isPrimary ? global.session_mode : 'user';
+ this._modeStack = [mode];
+ this._sync();
},
pushMode: function(mode) {
},
_sync: function() {
- let params = this._modes[this.currentMode];
+ let params = _modes[this.currentMode];
let defaults;
if (params.parentMode)
- defaults = Params.parse(this._modes[params.parentMode],
- this._modes[DEFAULT_MODE]);
+ defaults = Params.parse(_modes[params.parentMode],
+ _modes[DEFAULT_MODE]);
else
- defaults = this._modes[DEFAULT_MODE];
+ defaults = _modes[DEFAULT_MODE];
params = Params.parse(params, defaults);
// A simplified version of Lang.copyProperties, handles